import { IPagination } from './pagination'
import { propertyMap } from '@shared/decorators/property-map'
import { IQueryParams } from './queryParams'
import { IBiz } from './biz'
import { IAamsItem } from '@shared/components/aams-select/aams-select.interface'

// 终端列表查询参数
export interface ITerminalQueryParams extends IQueryParams, IBiz {
  /*
    创建时间
    终端编号
    终端状态
    门店编号
    门店名称
    机构编号
    机构名称
    集团编号
    集团名称
    商户编号
    商户名称
  */
  termCode?: string
  terminalStatus?: ITerminalStatus
  storeNum?: string
  storeName?: string

  /** 用于查询报表使用  */
  intStoreCode?: string
}

// 终端状态列表
export enum ITerminalStatus {
  Init = 'init', // 初始化
  Normal = 'normal', // 正常
  Freeze = 'freeze', // 冻结
}

export class Manual {
  termCode: string
}

// 终端信息
export class Terminal {
  id?: string // 唯一索引
  common: TerminalCommon
  qr: TerminalQR
  emvPans: IEmvPans

  /** 新接口 */
  version: number

  createdAt: string
  updatedAt: string

  constructor() {
    this.common = new TerminalCommon()
    this.qr = new TerminalQR()
  }
}

export class TerminalCommon {
  insCode: string // 机构编号
  insName: string // 机构名称
  insNameEN: string // 机构英文名称
  agentCode: string // 集团编号
  agentName: string // 集团名称
  agentNameEN: string // 集团英文名称
  intMerCode: string // 内部商户号
  merNum: string // 商户号
  merName: string // 商户名称
  merNameEN: string // 商户英文名称
  intStoreCode: string // 内部门店号
  storeNum: string // 门店编号
  storeName: string // 门店名称
  storeNameEN: string // 门店英文名称
  status: ITerminalStatus // 状态
  termCode: string // 终端编号
  remark: string // 备注
  termVendar: ETermVendar // 终端厂商

  cdKey: string // 激活码
  // qrCodeURL: string // 支付宝、微信等 URL 类型的二维码数据
  // qrCodeEMV: string // 银联、VISA等EMV标准的二维码数据
  wallets: string[]
  tradeTypes: string[]
  transCurr: string // 币种
}

export enum ETermVendar {
  Newland = 'Newland',
  Landi = 'Landi',
  Pax = 'Pax',
  Sunmi = 'Sunmi',
}

export class TerminalQR {
  isAmountFixed = false
  fixedAmt: string
  qrCode: string
  qrCodeURL: string // 支付宝、微信等 URL 类型的二维码数据
  qrCodeEMV: string // 银联、VISA等EMV标准的二维码数据
  emvPaymentBrands: string[]
  urlPaymentBrands: string[]
}

export interface IEmvPans {
  upiPan: string
  visPan: string
  mccPan: string
  fpsPan?: string
}

export interface ITermPagination extends IPagination {
  data: Terminal[]
}

export class TerminalNewRequest {
  intStoreCode: string
  count: number
  termCodes: string[] = []
  isAmountFixed: boolean
  fixedAmt: number
  remark: string
  termVendar: ETermVendar

  mode?: number // 新增过程中使用的变量，不往后端传
  manuals?: string[] = []
  selectedStore?: IAamsItem
  insCode?: string // 机构编号
  insName?: string // 机构名称
  insNameEN?: string // 机构英文名称
  agentCode?: string // 集团编号
  agentName?: string // 集团名称
  agentNameEN?: string // 集团英文名称
  intMerCode?: string // 内部商户号
  merNum?: string // 商户号
  merName?: string // 商户名称
  merNameEN?: string // 商户英文名称
  storeNum?: string // 门店编号
  storeName?: string // 门店名称
  storeNameEN?: string // 门店英文名称
}

export interface ITerminalUpdateRequest {
  version: number
  common: {
    remark: string;
    termVendar: ETermVendar;
  }
  qr?: {
    isAmountFixed: boolean;
    fixedAmt: string;
  }
}

export interface ITerminalReportPagination {
  url: string
}
